package com.tttshaoqi.server.mapper;

import com.tttshaoqi.pojo.dto.PostDto;
import com.tttshaoqi.pojo.entity.Post;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

@Mapper
public interface PostMapper {
    int insert(Post post);
    int update(Post post);
    int delete(@Param("id") Long id);
    // 新增批量删除方法
    int batchDelete(@Param("list") List<Long> idList);
    int batchDeleteOwned(@Param("userId") Long userId, @Param("list") List<Long> idList);
    Post findById(@Param("id") Long id);

    List<PostDto> listOrderByCreatedDesc(@Param("offset") int offset, @Param("size") int size);
    long countAll();

    List<PostDto> listByTag(@Param("tag") String tag, @Param("offset") int offset, @Param("size") int size);
    long countByTag(@Param("tag") String tag);

    List<PostDto> listByTagFuzzy(@Param("q") String q, @Param("offset") int offset, @Param("size") int size);
    long countByTagFuzzy(@Param("q") String q);

    List<Post> listByUserId(@Param("userId") Long userId, @Param("offset") int offset, @Param("size") int size);
    long countByUserId(@Param("userId") Long userId);

    /**
     * 获取指定分享的实时点赞数
     */
    Long getLikeCountById(@Param("id") Long id);

    /**
     * 获取指定分享的实时评论数
     */
    Long getCommentCountById(@Param("id") Long id);

    /**
     * 获取用户发布的分享列表（包含实时统计信息）
     */
    List<Post> listByUserIdWithStats(@Param("userId") Long userId, @Param("offset") int offset, @Param("size") int size);

    /**
     * 根据标题模糊查询帖子列表
     */
    List<Post> listByTitleFuzzy(@Param("title") String title, @Param("offset") int offset, @Param("size") int size);

    /**
     * 统计标题模糊查询的帖子数量
     */
    long countByTitleFuzzy(@Param("title") String title);

//    /**
//     * 更新帖子点赞数
//     */
//    int updateLikeCount(@Param("paramMap") Map<String, Object> paramMap);
//
//    /**
//     * 更新帖子评论数
//     */
//    int updateCommentCount(@Param("paramMap") Map<String, Object> paramMap);

    List<Post> listByUserIdAndPostIds(Long id, List<Long> ids);
}